import axios from 'axios'
import { Message } from 'element-ui'

// // 根据环境来匹配基准 url 接口地址
// const baseURL = process.env.NODE_ENV === 'development' ? '开发环境接口地址' : '生产环境接口地址'
const baseURL = 'http://rap2api.taobao.org/app/mock/308827'

// 创建 axios 实例
const service = axios.create({
  baseURL, // 基准 URL
  timeout: 10000, // 网络请求超时时间
})

/**
 * 请求拦截
 */
service.interceptors.request.use(
  config => {
    // 请求拦截时，向请求头中添加 用户 token 的认证传递
    // 用户 token 数据待获取
    // TODO...
    const token = 'token string...'
    config.headers.Authorization = 'Bearer ' + token
    return config
  },
  error => {
    Message.error(error.message || '请求拦截失败!')
    return Promise.reject(error)
  },
)

/**
 * 响应拦截
 */
service.interceptors.response.use(
  response => {
    // response.status 是服务器返回的 http 响应状态码
    if (response.status >= 200 && response.status < 300) {
      // respose.data 是服务器返回给前端的数据
      // const serverResponseData = response.data
      // 服务端向前端返回规范格式的数据: { code, data, message }
      const { code, data, message } = response.data
      // 判断规范, code 为 200，则 data 中是正确要使用到的数据，将其返回接口调用处
      if (code === 200) {
        return data
      }
      // code 不为 200 则说明有异常问题，在 message 中保存的就是相关异常的问题
      const err = new Error(message || '响应拦截处理有异常!')
      Message.error(message || '响应拦截处理有异常!')
      return Promise.reject(err)
    }
  },
  error => {
    Message.error(error.message || '响应拦截失败!')
    return Promise.reject(error)
  },
)

export default service
